home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 156 (1991-03-10)(Manewaldt, A.)(DE)(PD).zip / Taifun 156 (1991-03-10)(Manewaldt, A.)(DE)(PD).adf / Mem-Controller / Mem-Controller.asm < prev    next >
Assembly Source File  |  1991-02-18  |  8KB  |  475 lines

  1. * MEM-CONTROLLER (w) (c) by E.Hambuch
  2. * 21.12.90
  3. * E.Hambuch
  4. * Prinzenstr. 9
  5. * D-5330 Könisgwinter 1
  6. * Freeware
  7. * Wer Verbesserungen vornehmen will, darf dieses gerne tun !
  8. * Er muß jedoch meinen Namen hier drin stehen lassen und das Programm
  9. * als PD veröffentlichen
  10.   NOLIST
  11.   include 'exec.i'
  12.   include 'intuition.i'
  13.   include 'graphics.i'
  14.   include 'dos.i'
  15.   include 'startup.i'
  16.   LIST
  17. _main:
  18.   lea intname,a1
  19.   CALLEXEC OldOpenLibrary
  20.   move.l d0,_IntBase
  21.   beq ende
  22.   lea dosname,a1
  23.   jsr _LVOOldOpenLibrary(a6)
  24.   move.l d0,_DOSBase
  25.   beq closeint
  26.   lea gfxname,a1
  27.   jsr _LVOOldOpenLibrary(A6)
  28.   move.l d0,_GfxBase
  29.   beq closedos
  30.   lea windowstr1,a0
  31.   CALLINT OpenWindow
  32.   move.l d0,Window1
  33.   beq closegfx
  34.   move.l d0,a0
  35.   move.l 50(a0),RPort1
  36.   move.l 86(a0),MsgPort1
  37.   move.l 4,a1
  38.   lea _LVOAllocMem,a0
  39.   move.l #NewAllocMem,d0
  40.   CALLEXEC SetFunction
  41.   move.l d0,Vektor1
  42.   move.l 4,a1
  43.   lea _LVOAvailMem,a0
  44.   move.l #NewAvailMem,d0
  45.   jsr _LVOSetFunction(a6)
  46.   move.l d0,Vektor2
  47. forever1:
  48.   move.l Delay,d1
  49.   lsr.w #1,d1
  50.   beq.s fore1
  51.   CALLDOS Delay
  52. fore1:
  53.   move.l MsgPort1,a0
  54.   CALLEXEC GetMsg
  55.   tst.l d0
  56.   bne msg1
  57.   move.l Delay,d1
  58.   lsr.w #1,d1
  59.   beq.s fore2
  60.   CALLDOS Delay
  61. fore2: bsr updatemem
  62.   move.l MsgPort1,a0
  63.   CALLEXEC GetMsg
  64.   tst.l d0
  65.   bne.s msg1
  66.   bra forever1
  67. msg1:
  68.   move.l d0,a1
  69.   move.l 20(a1),d2
  70.   jsr _LVOReplyMsg(A6)
  71.   cmp.l #CLOSEWINDOW,d2
  72.   beq closeall
  73.   cmp.l #MENUPICK,d2
  74.   bne forever1
  75.   lea windowstr2,a0
  76.   CALLINT OpenWindow
  77.   move.l d0,Window2
  78.   beq forever1
  79.   move.l d0,a0
  80.   move.l 86(a0),MsgPort2
  81. forever2: bsr updatemem2
  82.   bsr updatemem
  83.   move.l Delay,d1
  84.   lsr.w #1,d1
  85.   beq.s fore3
  86.   CALLDOS Delay
  87. fore3:
  88.   move.l MsgPort2,a0
  89.   CALLEXEC GetMsg
  90.   tst.l d0
  91.   bne msg2
  92.   move.l Delay,d1
  93.   lsr.w #1,d1
  94.   beq.s fore4
  95.   CALLDOS Delay
  96. fore4:
  97.   bsr updatemem2
  98.   move.l MsgPort2,a0
  99.   CALLEXEC GetMsg
  100.   tst.l d0
  101.   beq forever2
  102. msg2:
  103.   move.l d0,a1
  104.   move.l 20(a1),d2
  105.   move.l 28(a1),a2
  106.   jsr _LVOReplyMsg(a6)
  107.   cmp.l #MENUPICK,d2
  108.   bne.s fore5
  109.   move.l Window2,a0
  110.   CALLINT CloseWindow
  111.   bra forever1
  112. fore5:
  113.   cmp.l #GADGETUP,d2
  114.   bne forever2
  115.   move.w 38(a2),d0
  116.   cmp.w #4,d0
  117.   bhi forever2
  118.   add.w d0,d0
  119.   add.w d0,d0
  120.   lea JumpTable,a0
  121.   move.l 0(a0,d0.w),a0
  122.   jsr (a0)
  123.   bra forever2
  124. closeall:
  125.   move.l 4,a1
  126.   lea _LVOAllocMem,a0
  127.   move.l Vektor1,d0
  128.   CALLEXEC SetFunction
  129.   move.l 4,a1
  130.   lea _LVOAvailMem,a0
  131.   move.l Vektor2,d0
  132.   jsr _LVOSetFunction(a6)
  133. closewin1:
  134.   move.l Window1,a0
  135.   CALLINT CloseWindow
  136. closegfx:
  137.   move.l _GfxBase,a1
  138.   CALLEXEC CloseLibrary
  139. closedos:
  140.   move.l _DOSBase,a1
  141.   jsr _LVOCloseLibrary(a6)
  142. closeint:
  143.   move.l _IntBase,a1
  144.   jsr _LVOCloseLibrary(A6)
  145. ende: moveq #0,d0
  146.   rts
  147. updatemem:
  148.   moveq #MEMF_CHIP,d1
  149.   CALLEXEC AvailMem
  150.   move.l d0,d3
  151.   lea Buf1,a0
  152.   bsr dez
  153.   moveq #MEMF_FAST,d1
  154.   jsr _LVOAvailMem(a6)
  155.   move.l d0,d3
  156.   lea Buf2,a0
  157.   bsr dez
  158.   moveq #MEMF_PUBLIC,d1
  159.   jsr _LVOAvailMem(A6)
  160.   move.l d0,d3
  161.   lea Buf3,a0
  162.   bsr dez
  163.   move.l RPort1,a0
  164.   lea MemIText,a1
  165.   moveq #31,d0
  166.   moveq #1,d1
  167.   move.l _IntBase,a6
  168.   jmp _LVOPrintIText(A6)
  169. dez:
  170.   lea deztab,a1
  171.   moveq #0,d1
  172. dez2: moveq #'0'-1,d2
  173.   move.l d1,d4
  174.   lsl.l #2,d4
  175. dez3: addq.b #1,d2
  176.   move.l d3,d5
  177.   sub.l 0(a1,d4.w),d3
  178.   bcc.s dez3
  179.   move.l d5,d3
  180.   move.b d2,0(a0,d1.w)
  181.   addq.b #1,d1
  182.   cmp.b #8,d1
  183.   bne dez2
  184.   moveq #6,d1
  185. dez4: move.b (a0)+,d0
  186.   cmp.b #'0',d0
  187.   bne.s dez5
  188.   move.b #' ',-1(a0)
  189.   dbra d1,dez4
  190. dez5: rts
  191. updatemem2:
  192.   moveq #MEMF_CHIP,d1
  193.   CALLEXEC AvailMem
  194.   move.l d0,d3
  195.   lea MemText3+6,a0
  196.   bsr dez
  197.   moveq #MEMF_FAST,d1
  198.   jsr _LVOAvailMem(a6)
  199.   move.l d0,d3
  200.   lea MemText3+16,a0
  201.   bsr dez
  202.   moveq #MEMF_PUBLIC,d1
  203.   jsr _LVOAvailMem(a6)
  204.   move.l d0,d3
  205.   lea MemText3+26,a0
  206.   bsr dez
  207.   move.l #MEMF_CHIP!MEMF_LARGEST,d1
  208.   jsr _LVOAvailMem(A6)
  209.   move.l d0,d3
  210.   lea MemText4+6,a0
  211.   bsr dez
  212.   move.l #MEMF_FAST!MEMF_LARGEST,d1
  213.   jsr _LVOAvailMem(a6)
  214.   move.l d0,d3
  215.   lea MemText4+16,a0
  216.   bsr dez
  217.   move.l #MEMF_FAST!MEMF_LARGEST,d1
  218.   jsr _LVOAvailMem(a6)
  219.   move.l d0,d3
  220.   lea MemText4+26,a0
  221.   bsr dez
  222.   move.l Window2,a0
  223.   move.l 50(a0),a0
  224.   lea MemIText2,a1
  225.   moveq #20,d0
  226.   moveq #20,d1
  227.   move.l _IntBase,a6
  228.   jmp _LVOPrintIText(a6)
  229. Sub1:
  230.   move.l StrInfo+28,d0
  231.   cmp.b #9,d0
  232.   bhi ende
  233.   mulu #50,d0
  234.   move.l d0,Delay
  235.   rts
  236. Sub2:  ;NoFastMem
  237. Sub3:
  238.   rts
  239. Sub4:
  240.   move.l #80000000,d0
  241.   moveq #MEMF_PUBLIC,d1
  242.   CALLEXEC AllocMem
  243.   move.l d0,d1
  244.   beq ende
  245.   move.l d0,a1
  246.   move.l #80000000,d0
  247.   jmp _LVOFreeMem(a6)
  248. Sub5:  CALLEXEC Forbid
  249.   move.l Window2,a0
  250.   move.l 46(a0),a1  ;WBenchScreen
  251.   cmp.b #1,184+5(a1)
  252.   beq Sub5end
  253.   moveq #0,d0
  254.   subq.b #1,184+5(a1)
  255.   move.b 184+5(a1),d0
  256.   lsl.w #2,d0
  257.   lea 184(a1),a1
  258.   move.l 8(a1,d0.w),a0
  259.   clr.l 8(a1,d0.w)
  260.   move.w (a1),d0
  261.   lsl.w #3,d0
  262.   move.w 2(a1),d1
  263.   CALLGRAF FreeRaster
  264.   CALLINT RemakeDisplay
  265. Sub5end: move.l _ExecBase,a6
  266.   jmp _LVOPermit(a6)
  267. NewAllocMem:
  268.   cmp.w #SELECTED!GADGHCOMP,Gadget2+12
  269.   bne.s OnlyChip
  270.   btst #2,d1
  271.   bne.s OldAllocMem
  272.   or.b #MEMF_CHIP!MEMF_PUBLIC,d1
  273. OnlyChip:
  274.   cmp.w #SELECTED!GADGHCOMP,Gadget3+12
  275.   bne.s OldAllocMem
  276.   bclr #2,d1
  277.   bset #1,d1
  278. OldAllocMem:
  279.   dc.w $4ef9 ;Code für JMP x.L
  280. Vektor1: dc.l 0
  281. NewAvailMem:
  282.   cmp.w #SELECTED!GADGHCOMP,Gadget2+12
  283.   bne.s NewAvailMem2
  284.   btst #2,d1
  285.   bne.s OldAvailMem
  286.   or.b #%11,d1
  287. NewAvailMem2:
  288.   cmp.w #SELECTED!GADGHCOMP,Gadget3+12
  289.   bne.s OldAvailMem
  290.   btst #2,d1
  291.   beq.s onlc
  292.   moveq #0,d0
  293.   rts
  294. onlc:
  295.   tst.l d1
  296.   beq.s onlc2
  297.   btst #0,d1  ;MEMF_PUBLIC ?
  298.   beq.s OldAvailMem
  299. onlc2:
  300.   bset #1,d1   ;->MEMF_CHIP
  301. OldAvailMem:
  302.   dc.w $4ef9
  303. Vektor2: dc.l 0
  304.   DATA
  305. Titel: dc.b ' Mem-CONTROLLER by E.Hambuch',0
  306. intname: dc.b 'intuition.library',0
  307. dosname: dc.b 'dos.library',0
  308. gfxname: dc.b 'graphics.library',0
  309. topazname: dc.b 'topaz.font',0
  310. Text1: dc.b 'Update:',0
  311. Text2: dc.b 'NoFastMem',0
  312. Text3: dc.b 'Only Chip',0
  313. Text4: dc.b ' MoreMem',0
  314. Text5: dc.b 'KillBitpl',0
  315. Text6: dc.b 'AllocFast',0
  316. StrBuffer: dc.b '2',0,0
  317. MemText: dc.b 'Chip: '
  318. Buf1: dc.b '00000000  Fast: '
  319. Buf2: dc.b '00000000  Total: '
  320. Buf3: dc.b '00000000 ',0
  321. MemText2:
  322.   dc.b '       Chip       Fast      Total',0
  323. MemText3:
  324.   dc.b 'Free  00000000  00000000  00000000',0
  325. MemText4:
  326.   dc.b 'Larg. 00000000  00000000  00000000',0
  327.  
  328.   EVEN
  329. JumpTable:
  330.   dc.l Sub1,Sub2,Sub3,Sub4,Sub5
  331. deztab:
  332.   dc.l 10000000
  333.   dc.l 1000000
  334.   dc.l 100000
  335.   dc.l 10000
  336.   dc.l 1000
  337.   dc.l 100
  338.   dc.l 10
  339.   dc.l 1
  340. windowstr1:
  341.   dc.w 10,0,470,10
  342.   dc.b 1,2
  343.   dc.l MENUPICK!CLOSEWINDOW
  344.   dc.l WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE
  345.   dc.l 0,0,Titel,0,0
  346.   ds.w 4
  347.   dc.w WBENCHSCREEN
  348. windowstr2:
  349.   dc.w 10,0,320,105
  350.   dc.b 0,1
  351.   dc.l GADGETUP!MENUPICK
  352.   dc.l WINDOWDRAG!WINDOWDEPTH!ACTIVATE
  353.   dc.l Gadget1,0,Titel,0,0
  354.   ds.w 4
  355.   dc.w WBENCHSCREEN
  356. Gadget1:
  357.   dc.l Gadget2
  358.   dc.w 80,60
  359.   dc.w 40,10
  360.   dc.w GADGHCOMP
  361.   dc.w LONGINT!RELVERIFY!STRINGCENTER
  362.   dc.w STRGADGET
  363.   dc.l Border1,0,IText1
  364.   dc.l 0,StrInfo
  365.   dc.w 0
  366.   dc.l 0
  367. Gadget2:
  368.   dc.l Gadget3
  369.   dc.w 20,75
  370.   dc.w 100,10
  371.   dc.w GADGHCOMP
  372.   dc.w RELVERIFY!TOGGLESELECT
  373.   dc.w BOOLGADGET
  374.   dc.l Border2,0,IText2
  375.   dc.l 0,0
  376.   dc.w 1
  377.   dc.l 0
  378. Gadget3:
  379.   dc.l Gadget4
  380.   dc.w 20,90
  381.   dc.w 100,10
  382.   dc.w GADGHCOMP
  383.   dc.w RELVERIFY!TOGGLESELECT
  384.   dc.w BOOLGADGET
  385.   dc.l Border2,0,IText3
  386.   dc.l 0,0
  387.   dc.w 2
  388.   dc.l 0
  389. Gadget4:
  390.   dc.l Gadget5
  391.   dc.w 150,60
  392.   dc.w 100,10
  393.   dc.w GADGHCOMP
  394.   dc.w RELVERIFY
  395.   dc.w BOOLGADGET
  396.   dc.l Border2,0,IText4
  397.   dc.l 0,0
  398.   dc.w 3
  399.   dc.l 0
  400. Gadget5:
  401.   dc.l 0
  402.   dc.w 150,75
  403.   dc.w 100,10
  404.   dc.w GADGHCOMP
  405.   dc.w RELVERIFY
  406.   dc.w BOOLGADGET
  407.   dc.l Border2,0,IText5
  408.   dc.l 0,0
  409.   dc.w 4
  410.   dc.l 0
  411. StrInfo:
  412.   dc.l StrBuffer
  413.   dc.l 0
  414.   dc.w 0,2,0,0,2,0,0,0
  415.   dc.l 0,2,0
  416. Border1:
  417.   dc.w -1,-1
  418.   dc.b 1,0,0,5
  419.   dc.l Koords1,0
  420. Koords1: dc.w 0,0,42,0,42,11,0,11,0,0
  421. Border2:
  422.   dc.w -1,-1
  423.   dc.b 1,0,0,5
  424.   dc.l Koords2,0
  425. Koords2: dc.w 0,0,101,0,101,11,0,11,0,0
  426. IText1:
  427.   dc.b 1,0,0,0
  428.   dc.w -60,1
  429.   dc.l TextAttr,Text1,0
  430. IText2:
  431.   dc.b 1,0,0,0
  432.   dc.w 15,1
  433.   dc.l TextAttr,Text2,0
  434. IText3:
  435.   dc.b 1,0,0,0
  436.   dc.w 15,1
  437.   dc.l TextAttr,Text3,0
  438. IText4:
  439.   dc.b 1,0,0,0
  440.   dc.w 15,1
  441.   dc.l TextAttr,Text4,0
  442. IText5:
  443.   dc.b 1,0,0,0
  444.   dc.w 15,1
  445.   dc.l TextAttr,Text5,0
  446. MemIText:
  447.   dc.b 1,2,1,0
  448.   dc.w 0,0
  449.   dc.l TextAttr,MemText,0
  450. MemIText2:
  451.   dc.b 1,0,1,0
  452.   dc.w 0,0
  453.   dc.l TextAttr,MemText2,MemIText3
  454. MemIText3:
  455.   dc.b 1,0,1,0
  456.   dc.w 0,10
  457.   dc.l TextAttr,MemText3,MemIText4
  458. MemIText4:
  459.   dc.b 1,0,1,0
  460.   dc.w 0,20
  461.   dc.l TextAttr,MemText4,0
  462. TextAttr: dc.l topazname
  463.   dc.w 8,0
  464. Delay:  dc.l 100
  465.   BSS
  466. _IntBase: ds.l 1
  467. _DOSBase: ds.l 1
  468. _GfxBase: ds.l 1
  469. Window1:  ds.l 1
  470. RPort1:   ds.l 1
  471. MsgPort1: ds.l 1
  472. Window2:  ds.l 1
  473. MsgPort2: ds.l 1
  474.   END
  475.